OWASP(Open Worldwide Application Security Project,中文翻譯為開放式Web應用程式安全專案)是一個國際的非營利組織,原本是針對Web應用程式統計並表列一系列常見的不安全行為做成OWASP TOP 10,後來逐漸擴大業務範圍,從出版軟體開發、測試、code review的指引文獻,到針對單一軟體:ZAP的一些使用說明、提出軟體保障成熟度模型框架等,最近甚至還有推出LLM(大型語言模型)的安全漏洞排名,都針對不同目標提出不同面向的安全問題及建議解決方法,並製作分類排名。
以最廣為人知的 OWASP Top 10 為例,這項排名大約3-4年更新一次,下一次更新預計在2025年,這次的更新於2021年,見下表:
根據發生次數、危險程度及內部成員投票表決統計,由第一名到第十名分別是
A01 - 存取控制失效
A02 - 加密失敗
A03 - 注入攻擊
A04 - 不安全的設計
A05 - 錯誤的系統配置
A06 - 脆弱或是過時的元件
A07 - 識別及驗證功能失效
A08 - 軟體或資料完整性失效
A09 - 安全日誌記錄和監控失敗
A10 - 伺服器端請求偽造
來源: https://owasp.org/Top10/
又以平常我們使用的開源軟體為例,最常見的風險由下往上分別是
R01 - 已知漏洞未修補
R02 - 攻擊者竄改已經受到信任的軟體包或程式
R03 - 名稱混淆攻擊
R04 - 不再維護的軟體
R05 - 過時的軟體(有維護,但不多)
R06 - 軟體使用未驗證的依賴元件
R07 - 憑證偽造/過期
R08 - 不成熟的軟體(不使用標準版本控制方案,沒有回歸測試套件、審查指南或文檔)
R09 - 未經批准的更改
R10 - 過小/過大的依賴元件(一個元件可能提供非常少的功能或很多功能)
來源: https://owasp.org/www-project-open-source-software-top-10/
然後這是本次鐵人賽文章依循叡揚資訊 secure code warrior的漏洞練習順序作為篇目:
(我是以C/C++及資安戰士挑戰賽指定語言java為訓練目標)
C01 - double free (記憶體損壞:雙重釋放)
C02 - null deference(記憶體損壞:空指標引用)
C03 - use-after-free(記憶體損壞:釋放後使用)
C04 - stack buffer overflow(記憶體損壞:堆疊溢位)
C05 - insecure randoness(不安全的密碼術:隨機性不安全)
C06 - weak crypto algorithm(不安全的密碼術:演算法使用方式脆弱)
C07 - error details - (資訊曝露:錯誤詳情)
C08 - SQL injection(注入缺陷:SQL 注入)
C09 - sensitive data exposure(敏感性資料儲存:明文儲存資料)
C10 - XML external entity injection(XML 外部實體 (XXE))
C11 - business logic(業務邏輯:邏輯錯誤)
C12 - insufficiant validation(業務邏輯:驗證不足)
C13 - missing function level access control(存取控制:遺漏功能層級存取控制)
C14 - insecure direct object reference(存取控制:不安全的直接物件引用)
C15 - uncaught error(拒絕服務:未被捕獲的錯誤)
C16 - REGEX DoS(拒絕服務:規則運算式 DoS)
這邊開始會是為了比賽所做的 Java Android SDK 框架安全練習整理,因為比賽有時間限制所以筆記會比較精簡點:
17 - 意外的資料洩漏:應用程式背景螢幕擷取畫面
18 - 不安全的身份驗證:鎖定機制脆弱/ 不安全的身份驗證:使用弱密碼
19 - 不合標準的密碼術:使用不安全或已棄用的演算法
20 - 不合標準的密碼術:重複利用初始化向量/ 不合標準的密碼術:加密金鑰的產生方式不安全
21 - 不安全的身份驗證:使用硬編碼的金鑰
22 - 不安全的身份驗證:用「記住我」功能儲存憑證/不安全的身份驗證:指紋使用不當
23 - 不安全的身份驗證:使用 Spoofable 參數進行身份驗證
24 - 意外的資料洩漏:日誌記錄敏感資訊
25 - 意外的資料洩漏:鍵盤快取
26 - 意外的資料洩漏:發送給第三方的分析資料
篇目屆時可能還會有異動,也會在中間穿插介紹資安戰士挑戰賽的比賽心得及比賽流程,就讓我們敬請期待~